package com.yyoo.doc.html.style;

import com.yyoo.doc.mypdf.MyPdfException;

/**
 * html style 属性值转换器
 * 将html style 属性值转换为 java 对象
 * @param <T>
 *
 * @author zzy
 */
public abstract class StyleValueConverter<T>{

    /**
     * 判断是否支持该 html style 属性
     * @param styleKey style 属性名称，如： font-size
     * @return true:支持，false:不支持
     */
    public abstract boolean support(String styleKey);

    /**
     * 返回当前样式的默认值
     * @param styleKey 样式名称
     */
    protected abstract T defaultValue(String styleKey);

    /**
     * 将html style 属性值转换为 java 对象
     * @param styleKey html style 属性名，如： font-size
     * @param styleValue html style 属性值，如： 12px
     * @return java 对象
     */
    public T convert(String styleKey,String styleValue){
        if(support(styleKey)){
            T value = convert(styleValue);
            return value == null ? defaultValue(styleKey) : value;
        }else {
            throw new MyPdfException("不支持"+ styleKey +"样式的转换");
        }
    }

    /**
     * 将html style 属性值转换为 java 对象
     * @param styleValue html style 属性值，如： 12px
     * @return java 对象，当返回 null 时，convert(String styleKey,String styleValue) 方法会返回 defaultValue(String styleKey)
     */
    protected abstract T convert(String styleValue);


}
